import { request } from '@/utils/request.js'

/**
 * 获取角色列表
 * @param {Object} params 查询参数
 * @returns {Promise}
 */
export function getrole(params) {
  return request({
    url: '/api/role/pageRoleList',
    method: 'post',
    params,
  })
}

/**
 * 获取角色下拉选项
 * @param {Object} params 查询参数
 * @returns {Promise}
 */
export function getRoleOptions(params) {
  return request({
    url: '/api/role/getRoleKeyValue',
    method: 'get',
    params,
  })
}

/**
 * 角色对象数据结构
 * @typedef {Object} Role
 * @property {number} id - 角色ID
 * @property {string} roleName - 角色名称
 * @property {string} roleKey - 角色标识符（唯一标识，创建后不可修改）
 * @property {string} roleDescription - 角色描述
 * @property {string} [roleStatus] - 角色状态（0：正常，1：停用）
 * @property {string} [createTime] - 创建时间
 */

/**
 * 添加角色
 * @param {Role} data - 角色信息对象
 * @returns {Promise} - 返回添加结果的Promise对象
 */
export function addrole(data) {
  return request({
    url: '/api/role/addRole',
    method: 'post',
    data,
  })
}

/**
 * 删除角色
 * @param {number} roleId 角色ID
 * @returns {Promise}
 */
export function delrole(roleId) {
  return request({
    url: `/api/role/${roleId}/delete`,
    method: 'delete',
  })
}

/**
 * 批量删除角色
 * @param {number[]} roleIds 角色ID数组
 * @returns {Promise}
 */
export function batchDelRole(roleIds) {
  return request({
    url: '/api/role/deleteBatch',
    method: 'delete',
    data: roleIds,
  })
}

/**
 * 修改角色
 * @param {Role} data - 角色信息对象
 * @returns {Promise} - 返回修改结果的Promise对象
 */
export function updatarole(data) {
  return request({
    url: '/api/role/updateRole',
    method: 'put',
    data,
  })
}

/**
 * 分配角色权限
 * @param {Object} data - 角色权限数据
 * @param {number} data.roleId - 角色ID
 * @param {number[]} data.menuIds - 菜单ID数组
 * @returns {Promise}
 */
export function assignRolePermissions({ roleId, menuIds }) {
  return request({
    url: `/api/role/${roleId}/grant`,
    method: 'post',
    data: menuIds,
  })
}

/**
 * 获取角色权限
 * @param {number} roleId - 角色ID
 * @returns {Promise}
 */
export function getRolePermissions(roleId) {
  return request({
    url: `/api/role/getUserGrantTree/${roleId}`,
    method: 'get',
  })
}
